//
//  HomeViewController.swift
//  ----meilishuo
//
//  Created by wkywangking on 2017/3/2.
//  Copyright © 2017年 wkywangking. All rights reserved.
//

import UIKit
import Alamofire

private let reuseIdentifier = "HomeCell"

class HomeViewController: UICollectionViewController {
    
    fileprivate var currentPage = 1
    
    /// 定义一个模型数组属性
    fileprivate var dataSource = [shopModel]() {
        didSet{
            collectionView?.reloadData()
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 调用方法,参数不用传,因为方法中的参数已经赋值?!
        loadData()
        
    }
    
}

// MARK: - 请求网络数据
extension HomeViewController{
    
    fileprivate func loadData(page: Int = 1){
        
        HttpTool.loadRequest(urlString: urlString(page), method: .get) { (response: [String : Any], error: Error?) in
            // 1.判断是否有错误
            if error != nil{
                return
            }
            
            // 2.取出数据
            guard let dictArr = response["goods_list"] as? [[String:Any]] else{
                return
            }
            
            
            // 判断页数,加载更多数据
            if page == 1 {
                // 3.把字典数组中的字典转换为模型
                self.dataSource = dictArr.map({ (dict: [String:Any]) -> shopModel in
                    return shopModel(dict: dict)
                })
            } else{
                let temp = dictArr.map({ (dict: [String:Any]) -> shopModel in
                    return shopModel(dict: dict)
                })
                self.dataSource.append(contentsOf: temp)
                // 记录当前的页数
                self.currentPage = page
            }
            
            // 4.刷新数据 ---> 由于转模型是异步执行,所以在此处刷新数据可能没有值 ---->当dataSource属性有值时再刷新--->什么时候有值?----> 在属性监听器didSet{}内部就代表着有值--->在didSet内部让collectionView进行刷新
        }

    }
}

// MARK: - UICollectionView Datasource
extension HomeViewController{
    
    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return dataSource.count
    }
    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath)
        // 把cell的类型转换为自定义cell
        let homeCell = cell as! HomeCell
        
        // 给cell的模型属性赋值
        homeCell.shopModel = dataSource[indexPath.item]
        
        return homeCell

    }
}

// MARK: - UICollectionView Delegate
extension HomeViewController{
    
    /// cell即将显示的时候会调用
    override func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
        // 当前页的最后一个cell显示的时候,加载下一页的数据
        // 判断是否最后一个cell
        if indexPath.item == self.dataSource.count - 1 {
            // 加载下一页数据
            // 当前页加1
            let currentPage = self.currentPage + 1
            loadData(page: currentPage)
        }
    }
}


